home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Utilities / MView / gxu / d3darcball.cod < prev    next >
Encoding:
Text File  |  2004-09-30  |  32.8 KB  |  1,179 lines

  1. ; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4035 
  2.  
  3.     TITLE    .\d3darcball.cpp
  4.     .386P
  5. include listing.inc
  6. if @Version gt 510
  7. .model FLAT
  8. else
  9. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  10. _TEXT    ENDS
  11. _DATA    SEGMENT DWORD USE32 PUBLIC 'DATA'
  12. _DATA    ENDS
  13. CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
  14. CONST    ENDS
  15. _BSS    SEGMENT DWORD USE32 PUBLIC 'BSS'
  16. _BSS    ENDS
  17. $$SYMBOLS    SEGMENT BYTE USE32 'DEBSYM'
  18. $$SYMBOLS    ENDS
  19. _TLS    SEGMENT DWORD USE32 PUBLIC 'TLS'
  20. _TLS    ENDS
  21. ;    COMDAT ??0GXArcBall@@QAE@XZ
  22. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  23. _TEXT    ENDS
  24. ;    COMDAT ??0GXArcBall@@QAE@ABH0@Z
  25. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  26. _TEXT    ENDS
  27. ;    COMDAT ??0GXArcBall@@QAE@AAUD3DXVECTOR3@@@Z
  28. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  29. _TEXT    ENDS
  30. ;    COMDAT ?Reset@GXArcBall@@QAEXXZ
  31. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  32. _TEXT    ENDS
  33. ;    COMDAT ?SetWindow@GXArcBall@@QAEXHHM@Z
  34. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  35. _TEXT    ENDS
  36. ;    COMDAT ?BeginDrag@GXArcBall@@QAEXABH0@Z
  37. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  38. _TEXT    ENDS
  39. ;    COMDAT ?EndDrag@GXArcBall@@QAEXXZ
  40. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  41. _TEXT    ENDS
  42. ;    COMDAT ?Mouse@GXArcBall@@QAEXABH0@Z
  43. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  44. _TEXT    ENDS
  45. ;    COMDAT ?GetMat@GXArcBall@@QAEXPAUD3DXMATRIX@@@Z
  46. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  47. _TEXT    ENDS
  48. ;    COMDAT ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z
  49. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  50. _TEXT    ENDS
  51. ;    COMDAT ?Update@GXArcBall@@QAEXXZ
  52. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  53. _TEXT    ENDS
  54. ;    COMDAT ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z
  55. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  56. _TEXT    ENDS
  57. ;    COMDAT ??0D3DXQUATERNION@@QAE@MMMM@Z
  58. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  59. _TEXT    ENDS
  60. ;    COMDAT ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z
  61. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  62. _TEXT    ENDS
  63. ;    COMDAT ?D3DXVec3Dot@@YAMPBUD3DXVECTOR3@@0@Z
  64. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  65. _TEXT    ENDS
  66. ;    COMDAT ??DD3DXQUATERNION@@QBE?AU0@ABU0@@Z
  67. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  68. _TEXT    ENDS
  69. ;    COMDAT _sqrtf
  70. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  71. _TEXT    ENDS
  72. ;    COMDAT ?D3DXQuaternionConjugate@@YAPAUD3DXQUATERNION@@PAU1@PBU1@@Z
  73. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  74. _TEXT    ENDS
  75. ;    COMDAT ?D3DXQuaternionIdentity@@YAPAUD3DXQUATERNION@@PAU1@@Z
  76. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  77. _TEXT    ENDS
  78. ;    COMDAT ??0D3DXVECTOR3@@QAE@MMM@Z
  79. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  80. _TEXT    ENDS
  81. ;    COMDAT ??0D3DXQUATERNION@@QAE@XZ
  82. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  83. _TEXT    ENDS
  84. ;    COMDAT ??0D3DXVECTOR3@@QAE@XZ
  85. _TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
  86. _TEXT    ENDS
  87. FLAT    GROUP _DATA, CONST, _BSS
  88.     ASSUME    CS: FLAT, DS: FLAT, SS: FLAT
  89. endif
  90.  
  91. INCLUDELIB LIBC
  92. INCLUDELIB OLDNAMES
  93.  
  94. PUBLIC    ?EndDrag@GXArcBall@@QAEXXZ            ; GXArcBall::EndDrag
  95. ; Function compile flags: /Ogs
  96. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\d3darcball.cpp
  97. ;    COMDAT ?EndDrag@GXArcBall@@QAEXXZ
  98. _TEXT    SEGMENT
  99. ?EndDrag@GXArcBall@@QAEXXZ PROC NEAR            ; GXArcBall::EndDrag, COMDAT
  100. ; _this$ = ecx
  101.  
  102. ; 80   : }
  103.  
  104.   00000    8b ff         npad     2
  105.   00002    56         push     esi
  106.   00003    57         push     edi
  107.  
  108. ; 78   :     m_bDrag = false;
  109. ; 79   :     m_qDown = m_qNow;
  110.  
  111.   00004    8d 71 34     lea     esi, DWORD PTR [ecx+52]
  112.   00007    8d 79 24     lea     edi, DWORD PTR [ecx+36]
  113.   0000a    a5         movsd
  114.   0000b    a5         movsd
  115.   0000c    a5         movsd
  116.   0000d    a5         movsd
  117.   0000e    5f         pop     edi
  118.   0000f    c6 41 50 00     mov     BYTE PTR [ecx+80], 0
  119.   00013    5e         pop     esi
  120.  
  121. ; 80   : }
  122.  
  123.   00014    c3         ret     0
  124. ?EndDrag@GXArcBall@@QAEXXZ ENDP                ; GXArcBall::EndDrag
  125. _TEXT    ENDS
  126. PUBLIC    _sqrtf
  127. EXTRN    __fltused:NEAR
  128. ; Function compile flags: /Ogs
  129. ; File d:\builds\nt32_fre\public\sdk\inc\crt\math.h
  130. ;    COMDAT _sqrtf
  131. _TEXT    SEGMENT
  132. __X$ = 8                        ; size = 4
  133. _sqrtf    PROC NEAR                    ; COMDAT
  134.  
  135. ; 458  :         {return ((float)sqrt((double)_X)); }
  136.  
  137.   00000    8b ff         npad     2
  138.   00002    55         push     ebp
  139.   00003    8b ec         mov     ebp, esp
  140.   00005    d9 45 08     fld     DWORD PTR __X$[ebp]
  141.   00008    d9 fa         fsqrt
  142.   0000a    5d         pop     ebp
  143.   0000b    c3         ret     0
  144. _sqrtf    ENDP
  145. _TEXT    ENDS
  146. PUBLIC    ??0D3DXVECTOR3@@QAE@XZ                ; D3DXVECTOR3::D3DXVECTOR3
  147. ; Function compile flags: /Ogs
  148. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.h
  149. ;    COMDAT ??0D3DXVECTOR3@@QAE@XZ
  150. _TEXT    SEGMENT
  151. ??0D3DXVECTOR3@@QAE@XZ PROC NEAR            ; D3DXVECTOR3::D3DXVECTOR3, COMDAT
  152. ; _this$ = ecx
  153.  
  154. ; 165  :     D3DXVECTOR3() {};
  155.  
  156.   00000    8b c1         mov     eax, ecx
  157.   00002    c3         ret     0
  158. ??0D3DXVECTOR3@@QAE@XZ ENDP                ; D3DXVECTOR3::D3DXVECTOR3
  159. _TEXT    ENDS
  160. PUBLIC    ??0D3DXQUATERNION@@QAE@XZ            ; D3DXQUATERNION::D3DXQUATERNION
  161. ; Function compile flags: /Ogs
  162. ;    COMDAT ??0D3DXQUATERNION@@QAE@XZ
  163. _TEXT    SEGMENT
  164. ??0D3DXQUATERNION@@QAE@XZ PROC NEAR            ; D3DXQUATERNION::D3DXQUATERNION, COMDAT
  165. ; _this$ = ecx
  166.  
  167. ; 429  :     D3DXQUATERNION() {}
  168.  
  169.   00000    8b c1         mov     eax, ecx
  170.   00002    c3         ret     0
  171. ??0D3DXQUATERNION@@QAE@XZ ENDP                ; D3DXQUATERNION::D3DXQUATERNION
  172. _TEXT    ENDS
  173. PUBLIC    ??0D3DXVECTOR3@@QAE@MMM@Z            ; D3DXVECTOR3::D3DXVECTOR3
  174. ; Function compile flags: /Ogs
  175. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  176. ;    COMDAT ??0D3DXVECTOR3@@QAE@MMM@Z
  177. _TEXT    SEGMENT
  178. _fx$ = 8                        ; size = 4
  179. _fy$ = 12                        ; size = 4
  180. _fz$ = 16                        ; size = 4
  181. ??0D3DXVECTOR3@@QAE@MMM@Z PROC NEAR            ; D3DXVECTOR3::D3DXVECTOR3, COMDAT
  182. ; _this$ = ecx
  183.  
  184. ; 308  : }
  185.  
  186.   00000    8b ff         npad     2
  187.  
  188. ; 304  : {
  189.  
  190.   00002    55         push     ebp
  191.   00003    8b ec         mov     ebp, esp
  192.   00005    8b c1         mov     eax, ecx
  193.  
  194. ; 305  :     x = fx;
  195.  
  196.   00007    8b 4d 08     mov     ecx, DWORD PTR _fx$[ebp]
  197.   0000a    89 08         mov     DWORD PTR [eax], ecx
  198.  
  199. ; 306  :     y = fy;
  200.  
  201.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _fy$[ebp]
  202.   0000f    89 48 04     mov     DWORD PTR [eax+4], ecx
  203.  
  204. ; 307  :     z = fz;
  205.  
  206.   00012    8b 4d 10     mov     ecx, DWORD PTR _fz$[ebp]
  207.   00015    89 48 08     mov     DWORD PTR [eax+8], ecx
  208.  
  209. ; 308  : }
  210.  
  211.   00018    5d         pop     ebp
  212.   00019    c2 0c 00     ret     12            ; 0000000cH
  213. ??0D3DXVECTOR3@@QAE@MMM@Z ENDP                ; D3DXVECTOR3::D3DXVECTOR3
  214. _TEXT    ENDS
  215. PUBLIC    ??0D3DXQUATERNION@@QAE@MMMM@Z            ; D3DXQUATERNION::D3DXQUATERNION
  216. ; Function compile flags: /Ogs
  217. ;    COMDAT ??0D3DXQUATERNION@@QAE@MMMM@Z
  218. _TEXT    SEGMENT
  219. _fx$ = 8                        ; size = 4
  220. _fy$ = 12                        ; size = 4
  221. _fz$ = 16                        ; size = 4
  222. _fw$ = 20                        ; size = 4
  223. ??0D3DXQUATERNION@@QAE@MMMM@Z PROC NEAR            ; D3DXQUATERNION::D3DXQUATERNION, COMDAT
  224. ; _this$ = ecx
  225.  
  226. ; 1078 : }
  227.  
  228.   00000    8b ff         npad     2
  229.  
  230. ; 1073 : {
  231.  
  232.   00002    55         push     ebp
  233.   00003    8b ec         mov     ebp, esp
  234.   00005    8b c1         mov     eax, ecx
  235.  
  236. ; 1074 :     x = fx;
  237.  
  238.   00007    8b 4d 08     mov     ecx, DWORD PTR _fx$[ebp]
  239.   0000a    89 08         mov     DWORD PTR [eax], ecx
  240.  
  241. ; 1075 :     y = fy;
  242.  
  243.   0000c    8b 4d 0c     mov     ecx, DWORD PTR _fy$[ebp]
  244.   0000f    89 48 04     mov     DWORD PTR [eax+4], ecx
  245.  
  246. ; 1076 :     z = fz;
  247.  
  248.   00012    8b 4d 10     mov     ecx, DWORD PTR _fz$[ebp]
  249.   00015    89 48 08     mov     DWORD PTR [eax+8], ecx
  250.  
  251. ; 1077 :     w = fw;
  252.  
  253.   00018    8b 4d 14     mov     ecx, DWORD PTR _fw$[ebp]
  254.   0001b    89 48 0c     mov     DWORD PTR [eax+12], ecx
  255.  
  256. ; 1078 : }
  257.  
  258.   0001e    5d         pop     ebp
  259.   0001f    c2 10 00     ret     16            ; 00000010H
  260. ??0D3DXQUATERNION@@QAE@MMMM@Z ENDP            ; D3DXQUATERNION::D3DXQUATERNION
  261. _TEXT    ENDS
  262. PUBLIC    ??DD3DXQUATERNION@@QBE?AU0@ABU0@@Z        ; D3DXQUATERNION::operator*
  263. EXTRN    _D3DXQuaternionMultiply@12:NEAR
  264. ; Function compile flags: /Ogs
  265. ;    COMDAT ??DD3DXQUATERNION@@QBE?AU0@ABU0@@Z
  266. _TEXT    SEGMENT
  267. _qT$ = -16                        ; size = 16
  268. ___$ReturnUdt$ = 8                    ; size = 4
  269. _q$ = 12                        ; size = 4
  270. ??DD3DXQUATERNION@@QBE?AU0@ABU0@@Z PROC NEAR        ; D3DXQUATERNION::operator*, COMDAT
  271. ; _this$ = ecx
  272.  
  273. ; 1178 : }
  274.  
  275.   00000    8b ff         npad     2
  276.  
  277. ; 1174 : {
  278.  
  279.   00002    55         push     ebp
  280.   00003    8b ec         mov     ebp, esp
  281.   00005    83 ec 10     sub     esp, 16            ; 00000010H
  282.   00008    56         push     esi
  283.   00009    57         push     edi
  284.  
  285. ; 1175 :     D3DXQUATERNION qT;
  286. ; 1176 :     D3DXQuaternionMultiply(&qT, this, &q);
  287.  
  288.   0000a    ff 75 0c     push     DWORD PTR _q$[ebp]
  289.   0000d    8d 45 f0     lea     eax, DWORD PTR _qT$[ebp]
  290.   00010    51         push     ecx
  291.   00011    50         push     eax
  292.   00012    e8 00 00 00 00     call     _D3DXQuaternionMultiply@12
  293.  
  294. ; 1177 :     return qT;
  295.  
  296.   00017    8b 45 08     mov     eax, DWORD PTR ___$ReturnUdt$[ebp]
  297.   0001a    8d 75 f0     lea     esi, DWORD PTR _qT$[ebp]
  298.   0001d    8b f8         mov     edi, eax
  299.   0001f    a5         movsd
  300.   00020    a5         movsd
  301.   00021    a5         movsd
  302.   00022    a5         movsd
  303.   00023    5f         pop     edi
  304.   00024    5e         pop     esi
  305.  
  306. ; 1178 : }
  307.  
  308.   00025    c9         leave
  309.   00026    c2 08 00     ret     8
  310. ??DD3DXQUATERNION@@QBE?AU0@ABU0@@Z ENDP            ; D3DXQUATERNION::operator*
  311. _TEXT    ENDS
  312. PUBLIC    ?D3DXVec3Dot@@YAMPBUD3DXVECTOR3@@0@Z        ; D3DXVec3Dot
  313. ; Function compile flags: /Ogs
  314. ;    COMDAT ?D3DXVec3Dot@@YAMPBUD3DXVECTOR3@@0@Z
  315. _TEXT    SEGMENT
  316. _pV1$ = 8                        ; size = 4
  317. _pV2$ = 12                        ; size = 4
  318. ?D3DXVec3Dot@@YAMPBUD3DXVECTOR3@@0@Z PROC NEAR        ; D3DXVec3Dot, COMDAT
  319.  
  320. ; 1736 : }
  321.  
  322.   00000    8b ff         npad     2
  323.  
  324. ; 1729 : {
  325.  
  326.   00002    55         push     ebp
  327.   00003    8b ec         mov     ebp, esp
  328.  
  329. ; 1730 : #ifdef D3DX_DEBUG
  330. ; 1731 :     if(!pV1 || !pV2)
  331. ; 1732 :         return 0.0f;
  332. ; 1733 : #endif
  333. ; 1734 : 
  334. ; 1735 :     return pV1->x * pV2->x + pV1->y * pV2->y + pV1->z * pV2->z;
  335.  
  336.   00005    8b 45 08     mov     eax, DWORD PTR _pV1$[ebp]
  337.   00008    8b 4d 0c     mov     ecx, DWORD PTR _pV2$[ebp]
  338.   0000b    d9 40 08     fld     DWORD PTR [eax+8]
  339.   0000e    d8 49 08     fmul     DWORD PTR [ecx+8]
  340.   00011    d9 40 04     fld     DWORD PTR [eax+4]
  341.   00014    d8 49 04     fmul     DWORD PTR [ecx+4]
  342.   00017    de c1         faddp     ST(1), ST(0)
  343.   00019    d9 00         fld     DWORD PTR [eax]
  344.   0001b    d8 09         fmul     DWORD PTR [ecx]
  345.   0001d    de c1         faddp     ST(1), ST(0)
  346.  
  347. ; 1736 : }
  348.  
  349.   0001f    5d         pop     ebp
  350.   00020    c3         ret     0
  351. ?D3DXVec3Dot@@YAMPBUD3DXVECTOR3@@0@Z ENDP        ; D3DXVec3Dot
  352. _TEXT    ENDS
  353. PUBLIC    ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z    ; D3DXVec3Cross
  354. ; Function compile flags: /Ogs
  355. ;    COMDAT ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z
  356. _TEXT    SEGMENT
  357. _v$ = -12                        ; size = 12
  358. _pOut$ = 8                        ; size = 4
  359. _pV1$ = 12                        ; size = 4
  360. _pV2$ = 16                        ; size = 4
  361. ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z PROC NEAR ; D3DXVec3Cross, COMDAT
  362.  
  363. ; 1753 :     return pOut;
  364. ; 1754 : }
  365.  
  366.   00000    8b ff         npad     2
  367.  
  368. ; 1740 : {
  369.  
  370.   00002    55         push     ebp
  371.   00003    8b ec         mov     ebp, esp
  372.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  373.  
  374. ; 1741 :     D3DXVECTOR3 v;
  375. ; 1742 : 
  376. ; 1743 : #ifdef D3DX_DEBUG
  377. ; 1744 :     if(!pOut || !pV1 || !pV2)
  378. ; 1745 :         return NULL;
  379. ; 1746 : #endif
  380. ; 1747 : 
  381. ; 1748 :     v.x = pV1->y * pV2->z - pV1->z * pV2->y;
  382.  
  383.   00008    8b 4d 10     mov     ecx, DWORD PTR _pV2$[ebp]
  384.   0000b    8b 45 0c     mov     eax, DWORD PTR _pV1$[ebp]
  385.   0000e    d9 41 08     fld     DWORD PTR [ecx+8]
  386.   00011    d8 48 04     fmul     DWORD PTR [eax+4]
  387.   00014    56         push     esi
  388.   00015    d9 40 08     fld     DWORD PTR [eax+8]
  389.   00018    57         push     edi
  390.   00019    d8 49 04     fmul     DWORD PTR [ecx+4]
  391.  
  392. ; 1749 :     v.y = pV1->z * pV2->x - pV1->x * pV2->z;
  393. ; 1750 :     v.z = pV1->x * pV2->y - pV1->y * pV2->x;
  394. ; 1751 : 
  395. ; 1752 :     *pOut = v;
  396.  
  397.   0001c    8d 75 f4     lea     esi, DWORD PTR _v$[ebp]
  398.   0001f    de e9         fsubp     ST(1), ST(0)
  399.   00021    d9 5d f4     fstp     DWORD PTR _v$[ebp]
  400.   00024    d9 40 08     fld     DWORD PTR [eax+8]
  401.   00027    d8 09         fmul     DWORD PTR [ecx]
  402.   00029    d9 41 08     fld     DWORD PTR [ecx+8]
  403.   0002c    d8 08         fmul     DWORD PTR [eax]
  404.   0002e    de e9         fsubp     ST(1), ST(0)
  405.   00030    d9 5d f8     fstp     DWORD PTR _v$[ebp+4]
  406.   00033    d9 00         fld     DWORD PTR [eax]
  407.   00035    d8 49 04     fmul     DWORD PTR [ecx+4]
  408.   00038    d9 01         fld     DWORD PTR [ecx]
  409.   0003a    d8 48 04     fmul     DWORD PTR [eax+4]
  410.   0003d    8b 45 08     mov     eax, DWORD PTR _pOut$[ebp]
  411.   00040    8b f8         mov     edi, eax
  412.   00042    de e9         fsubp     ST(1), ST(0)
  413.   00044    d9 5d fc     fstp     DWORD PTR _v$[ebp+8]
  414.   00047    a5         movsd
  415.   00048    a5         movsd
  416.   00049    a5         movsd
  417.   0004a    5f         pop     edi
  418.   0004b    5e         pop     esi
  419.  
  420. ; 1753 :     return pOut;
  421. ; 1754 : }
  422.  
  423.   0004c    c9         leave
  424.   0004d    c3         ret     0
  425. ?D3DXVec3Cross@@YAPAUD3DXVECTOR3@@PAU1@PBU1@1@Z ENDP    ; D3DXVec3Cross
  426. _TEXT    ENDS
  427. PUBLIC    ?D3DXQuaternionIdentity@@YAPAUD3DXQUATERNION@@PAU1@@Z ; D3DXQuaternionIdentity
  428. ; Function compile flags: /Ogs
  429. ;    COMDAT ?D3DXQuaternionIdentity@@YAPAUD3DXQUATERNION@@PAU1@@Z
  430. _TEXT    SEGMENT
  431. _pOut$ = 8                        ; size = 4
  432. ?D3DXQuaternionIdentity@@YAPAUD3DXQUATERNION@@PAU1@@Z PROC NEAR ; D3DXQuaternionIdentity, COMDAT
  433.  
  434. ; 2064 :     return pOut;
  435. ; 2065 : }
  436.  
  437.   00000    8b ff         npad     2
  438.  
  439. ; 2056 : {
  440.  
  441.   00002    55         push     ebp
  442.   00003    8b ec         mov     ebp, esp
  443.  
  444. ; 2057 : #ifdef D3DX_DEBUG
  445. ; 2058 :     if(!pOut)
  446. ; 2059 :         return NULL;
  447. ; 2060 : #endif
  448. ; 2061 : 
  449. ; 2062 :     pOut->x = pOut->y = pOut->z = 0.0f;
  450.  
  451.   00005    8b 45 08     mov     eax, DWORD PTR _pOut$[ebp]
  452.   00008    d9 ee         fldz
  453.   0000a    d9 58 08     fstp     DWORD PTR [eax+8]
  454.   0000d    d9 ee         fldz
  455.   0000f    d9 58 04     fstp     DWORD PTR [eax+4]
  456.   00012    d9 ee         fldz
  457.   00014    d9 18         fstp     DWORD PTR [eax]
  458.  
  459. ; 2063 :     pOut->w = 1.0f;
  460.  
  461.   00016    d9 e8         fld1
  462.   00018    d9 58 0c     fstp     DWORD PTR [eax+12]
  463.  
  464. ; 2064 :     return pOut;
  465. ; 2065 : }
  466.  
  467.   0001b    5d         pop     ebp
  468.   0001c    c3         ret     0
  469. ?D3DXQuaternionIdentity@@YAPAUD3DXQUATERNION@@PAU1@@Z ENDP ; D3DXQuaternionIdentity
  470. _TEXT    ENDS
  471. PUBLIC    ?D3DXQuaternionConjugate@@YAPAUD3DXQUATERNION@@PAU1@PBU1@@Z ; D3DXQuaternionConjugate
  472. ; Function compile flags: /Ogs
  473. ;    COMDAT ?D3DXQuaternionConjugate@@YAPAUD3DXQUATERNION@@PAU1@PBU1@@Z
  474. _TEXT    SEGMENT
  475. _pOut$ = 8                        ; size = 4
  476. _pQ$ = 12                        ; size = 4
  477. ?D3DXQuaternionConjugate@@YAPAUD3DXQUATERNION@@PAU1@PBU1@@Z PROC NEAR ; D3DXQuaternionConjugate, COMDAT
  478.  
  479. ; 2091 :     return pOut;
  480. ; 2092 : }
  481.  
  482.   00000    8b ff         npad     2
  483.  
  484. ; 2081 : {
  485.  
  486.   00002    55         push     ebp
  487.   00003    8b ec         mov     ebp, esp
  488.  
  489. ; 2082 : #ifdef D3DX_DEBUG
  490. ; 2083 :     if(!pOut || !pQ)
  491. ; 2084 :         return NULL;
  492. ; 2085 : #endif
  493. ; 2086 : 
  494. ; 2087 :     pOut->x = -pQ->x;
  495.  
  496.   00005    8b 4d 0c     mov     ecx, DWORD PTR _pQ$[ebp]
  497.   00008    d9 01         fld     DWORD PTR [ecx]
  498.   0000a    8b 45 08     mov     eax, DWORD PTR _pOut$[ebp]
  499.   0000d    d9 e0         fchs
  500.   0000f    d9 18         fstp     DWORD PTR [eax]
  501.  
  502. ; 2088 :     pOut->y = -pQ->y;
  503.  
  504.   00011    d9 41 04     fld     DWORD PTR [ecx+4]
  505.   00014    d9 e0         fchs
  506.   00016    d9 58 04     fstp     DWORD PTR [eax+4]
  507.  
  508. ; 2089 :     pOut->z = -pQ->z;
  509.  
  510.   00019    d9 41 08     fld     DWORD PTR [ecx+8]
  511.   0001c    d9 e0         fchs
  512.   0001e    d9 58 08     fstp     DWORD PTR [eax+8]
  513.  
  514. ; 2090 :     pOut->w =  pQ->w;
  515.  
  516.   00021    8b 49 0c     mov     ecx, DWORD PTR [ecx+12]
  517.   00024    89 48 0c     mov     DWORD PTR [eax+12], ecx
  518.  
  519. ; 2091 :     return pOut;
  520. ; 2092 : }
  521.  
  522.   00027    5d         pop     ebp
  523.   00028    c3         ret     0
  524. ?D3DXQuaternionConjugate@@YAPAUD3DXQUATERNION@@PAU1@PBU1@@Z ENDP ; D3DXQuaternionConjugate
  525. _TEXT    ENDS
  526. PUBLIC    ?Reset@GXArcBall@@QAEXXZ            ; GXArcBall::Reset
  527. ; Function compile flags: /Ogs
  528. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\d3darcball.cpp
  529. ;    COMDAT ?Reset@GXArcBall@@QAEXXZ
  530. _TEXT    SEGMENT
  531. ?Reset@GXArcBall@@QAEXXZ PROC NEAR            ; GXArcBall::Reset, COMDAT
  532. ; _this$ = ecx
  533.  
  534. ; 54   :     D3DXQuaternionIdentity(&m_qDown);
  535.  
  536.   00000    d9 ee         fldz
  537.   00002    d9 59 2c     fstp     DWORD PTR [ecx+44]
  538.   00005    d9 ee         fldz
  539.   00007    d9 59 28     fstp     DWORD PTR [ecx+40]
  540.   0000a    d9 ee         fldz
  541.   0000c    d9 59 24     fstp     DWORD PTR [ecx+36]
  542.   0000f    d9 e8         fld1
  543.   00011    d9 59 30     fstp     DWORD PTR [ecx+48]
  544.  
  545. ; 55   :     D3DXQuaternionIdentity(&m_qNow);
  546.  
  547.   00014    d9 ee         fldz
  548.   00016    d9 59 3c     fstp     DWORD PTR [ecx+60]
  549.   00019    d9 ee         fldz
  550.   0001b    d9 59 38     fstp     DWORD PTR [ecx+56]
  551.   0001e    d9 ee         fldz
  552.   00020    d9 59 34     fstp     DWORD PTR [ecx+52]
  553.   00023    d9 e8         fld1
  554.   00025    d9 59 40     fstp     DWORD PTR [ecx+64]
  555.  
  556. ; 56   :     m_bDrag = false;
  557.  
  558.   00028    c6 41 50 00     mov     BYTE PTR [ecx+80], 0
  559.  
  560. ; 57   : }
  561.  
  562.   0002c    c3         ret     0
  563. ?Reset@GXArcBall@@QAEXXZ ENDP                ; GXArcBall::Reset
  564. _TEXT    ENDS
  565. PUBLIC    __real@3f000000
  566. PUBLIC    ?SetWindow@GXArcBall@@QAEXHHM@Z            ; GXArcBall::SetWindow
  567. ;    COMDAT __real@3f000000
  568. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  569. CONST    SEGMENT
  570. __real@3f000000 DD 03f000000r            ; 0.5
  571. ; Function compile flags: /Ogs
  572. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\d3darcball.cpp
  573. CONST    ENDS
  574. ;    COMDAT ?SetWindow@GXArcBall@@QAEXHHM@Z
  575. _TEXT    SEGMENT
  576. $T56388 = -12                        ; size = 12
  577. _iWidth$ = 8                        ; size = 4
  578. _iHeight$ = 12                        ; size = 4
  579. _fRadius$ = 16                        ; size = 4
  580. ?SetWindow@GXArcBall@@QAEXHHM@Z PROC NEAR        ; GXArcBall::SetWindow, COMDAT
  581. ; _this$ = ecx
  582.  
  583. ; 68   : }
  584.  
  585.   00000    8b ff         npad     2
  586.  
  587. ; 60   : {
  588.  
  589.   00002    55         push     ebp
  590.   00003    8b ec         mov     ebp, esp
  591.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  592.  
  593. ; 61   :     // set win info
  594. ; 62   :     m_iWidth = iWidth; 
  595. ; 63   :     m_iHeight = iHeight; 
  596. ; 64   :     m_fRadius = fRadius; 
  597. ; 65   : 
  598. ; 66   :     // set center after this
  599. ; 67   :     m_vCenter = D3DXVECTOR3(iWidth/2.0f,iHeight/2.0f,0.0f);
  600.  
  601.   00008    d9 05 00 00 00
  602.     00         fld     DWORD PTR __real@3f000000
  603.   0000e    8b 45 08     mov     eax, DWORD PTR _iWidth$[ebp]
  604.   00011    db 45 08     fild     DWORD PTR _iWidth$[ebp]
  605.   00014    56         push     esi
  606.   00015    57         push     edi
  607.   00016    8d 75 f4     lea     esi, DWORD PTR $T56388[ebp]
  608.   00019    d8 c9         fmul     ST(0), ST(1)
  609.   0001b    8b f9         mov     edi, ecx
  610.   0001d    89 41 44     mov     DWORD PTR [ecx+68], eax
  611.   00020    8b 45 0c     mov     eax, DWORD PTR _iHeight$[ebp]
  612.   00023    d9 5d f4     fstp     DWORD PTR $T56388[ebp]
  613.   00026    89 41 48     mov     DWORD PTR [ecx+72], eax
  614.   00029    db 45 0c     fild     DWORD PTR _iHeight$[ebp]
  615.   0002c    8b 45 10     mov     eax, DWORD PTR _fRadius$[ebp]
  616.   0002f    89 41 4c     mov     DWORD PTR [ecx+76], eax
  617.   00032    d8 c9         fmul     ST(0), ST(1)
  618.   00034    d9 5d f8     fstp     DWORD PTR $T56388[ebp+4]
  619.   00037    dd d8         fstp     ST(0)
  620.   00039    d9 ee         fldz
  621.   0003b    d9 5d fc     fstp     DWORD PTR $T56388[ebp+8]
  622.   0003e    a5         movsd
  623.   0003f    a5         movsd
  624.   00040    a5         movsd
  625.   00041    5f         pop     edi
  626.   00042    5e         pop     esi
  627.  
  628. ; 68   : }
  629.  
  630.   00043    c9         leave
  631.   00044    c2 0c 00     ret     12            ; 0000000cH
  632. ?SetWindow@GXArcBall@@QAEXHHM@Z ENDP            ; GXArcBall::SetWindow
  633. _TEXT    ENDS
  634. PUBLIC    ?GetMat@GXArcBall@@QAEXPAUD3DXMATRIX@@@Z    ; GXArcBall::GetMat
  635. EXTRN    _D3DXMatrixRotationQuaternion@8:NEAR
  636. ; Function compile flags: /Ogs
  637. ;    COMDAT ?GetMat@GXArcBall@@QAEXPAUD3DXMATRIX@@@Z
  638. _TEXT    SEGMENT
  639. _qConj$ = -16                        ; size = 16
  640. _pmat$ = 8                        ; size = 4
  641. ?GetMat@GXArcBall@@QAEXPAUD3DXMATRIX@@@Z PROC NEAR    ; GXArcBall::GetMat, COMDAT
  642. ; _this$ = ecx
  643.  
  644. ; 94   : }
  645.  
  646.   00000    8b ff         npad     2
  647.  
  648. ; 91   : {
  649.  
  650.   00002    55         push     ebp
  651.   00003    8b ec         mov     ebp, esp
  652.   00005    83 ec 10     sub     esp, 16            ; 00000010H
  653.  
  654. ; 92   :     D3DXQUATERNION qConj;
  655. ; 93   :     D3DXMatrixRotationQuaternion(pmat, D3DXQuaternionConjugate(&qConj, &m_qNow));
  656.  
  657.   00008    d9 41 34     fld     DWORD PTR [ecx+52]
  658.   0000b    8b 41 40     mov     eax, DWORD PTR [ecx+64]
  659.   0000e    d9 e0         fchs
  660.   00010    89 45 fc     mov     DWORD PTR _qConj$[ebp+12], eax
  661.   00013    d9 5d f0     fstp     DWORD PTR _qConj$[ebp]
  662.   00016    8d 45 f0     lea     eax, DWORD PTR _qConj$[ebp]
  663.   00019    d9 41 38     fld     DWORD PTR [ecx+56]
  664.   0001c    50         push     eax
  665.   0001d    ff 75 08     push     DWORD PTR _pmat$[ebp]
  666.   00020    d9 e0         fchs
  667.   00022    d9 5d f4     fstp     DWORD PTR _qConj$[ebp+4]
  668.   00025    d9 41 3c     fld     DWORD PTR [ecx+60]
  669.   00028    d9 e0         fchs
  670.   0002a    d9 5d f8     fstp     DWORD PTR _qConj$[ebp+8]
  671.   0002d    e8 00 00 00 00     call     _D3DXMatrixRotationQuaternion@8
  672.  
  673. ; 94   : }
  674.  
  675.   00032    c9         leave
  676.   00033    c2 04 00     ret     4
  677. ?GetMat@GXArcBall@@QAEXPAUD3DXMATRIX@@@Z ENDP        ; GXArcBall::GetMat
  678. _TEXT    ENDS
  679. PUBLIC    __real@3ff0000000000000
  680. PUBLIC    __real@3f800000
  681. PUBLIC    __real@4f800000
  682. PUBLIC    ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z ; GXArcBall::ScreenToVector
  683. ;    COMDAT __real@4f800000
  684. ; File d:\builds\nt32_fre\public\sdk\inc\d3dx9math.inl
  685. CONST    SEGMENT
  686. __real@4f800000 DD 04f800000r            ; 4.29497e+009
  687. CONST    ENDS
  688. ;    COMDAT __real@3ff0000000000000
  689. CONST    SEGMENT
  690. __real@3ff0000000000000 DQ 03ff0000000000000r    ; 1
  691. CONST    ENDS
  692. ;    COMDAT __real@3f800000
  693. CONST    SEGMENT
  694. __real@3f800000 DD 03f800000r            ; 1
  695. ; Function compile flags: /Ogs
  696. ; File d:\builds\nt32_fre\multimedia\directx\dxsdk\src\mview\gxu\d3darcball.cpp
  697. CONST    ENDS
  698. ;    COMDAT ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z
  699. _TEXT    SEGMENT
  700. tv269 = -4                        ; size = 4
  701. tv211 = -4                        ; size = 4
  702. ___$ReturnUdt$ = 8                    ; size = 4
  703. _px$ = 12                        ; size = 4
  704. _py$ = 16                        ; size = 4
  705. ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z PROC NEAR ; GXArcBall::ScreenToVector, COMDAT
  706. ; _this$ = ecx
  707.  
  708. ; 124  : }
  709.  
  710.   00000    8b ff         npad     2
  711.  
  712. ; 97   : {
  713.  
  714.   00002    55         push     ebp
  715.   00003    8b ec         mov     ebp, esp
  716.   00005    51         push     ecx
  717.  
  718. ; 98   :     float x,y,z;
  719. ; 99   : 
  720. ; 100  :     DWORD dwScreenDiameter = min(m_iWidth, m_iHeight);
  721.  
  722.   00006    8b 41 44     mov     eax, DWORD PTR [ecx+68]
  723.   00009    8b 51 48     mov     edx, DWORD PTR [ecx+72]
  724.   0000c    3b c2         cmp     eax, edx
  725.   0000e    7c 02         jl     SHORT $L56404
  726.   00010    8b c2         mov     eax, edx
  727. $L56404:
  728.  
  729. ; 121  :     }
  730. ; 122  : 
  731. ; 123  :     return D3DXVECTOR3(x,y,z);
  732.  
  733.   00012    85 c0         test     eax, eax
  734.   00014    89 45 fc     mov     DWORD PTR tv269[ebp], eax
  735.   00017    db 45 fc     fild     DWORD PTR tv269[ebp]
  736.   0001a    7d 06         jge     SHORT $L56418
  737.   0001c    d8 05 00 00 00
  738.     00         fadd     DWORD PTR __real@4f800000
  739. $L56418:
  740.   00022    d8 49 4c     fmul     DWORD PTR [ecx+76]
  741.   00025    8b 45 0c     mov     eax, DWORD PTR _px$[ebp]
  742.   00028    d8 0d 00 00 00
  743.     00         fmul     DWORD PTR __real@3f000000
  744.   0002e    d9 5d fc     fstp     DWORD PTR tv211[ebp]
  745.   00031    db 00         fild     DWORD PTR [eax]
  746.   00033    8b 45 10     mov     eax, DWORD PTR _py$[ebp]
  747.   00036    d8 21         fsub     DWORD PTR [ecx]
  748.   00038    d8 75 fc     fdiv     DWORD PTR tv211[ebp]
  749.   0003b    d9 e0         fchs
  750.   0003d    db 00         fild     DWORD PTR [eax]
  751.   0003f    d8 69 04     fsubr     DWORD PTR [ecx+4]
  752.   00042    d8 75 fc     fdiv     DWORD PTR tv211[ebp]
  753.   00045    d9 e0         fchs
  754.   00047    d9 c0         fld     ST(0)
  755.   00049    d8 c9         fmul     ST(0), ST(1)
  756.   0004b    d9 c2         fld     ST(2)
  757.   0004d    d8 cb         fmul     ST(0), ST(3)
  758.   0004f    de c1         faddp     ST(1), ST(0)
  759.   00051    dc 15 00 00 00
  760.     00         fcom     QWORD PTR __real@3ff0000000000000
  761.   00057    df e0         fnstsw     ax
  762.   00059    f6 c4 41     test     ah, 65            ; 00000041H
  763.   0005c    75 12         jne     SHORT $L56309
  764.   0005e    d9 fa         fsqrt
  765.   00060    d8 3d 00 00 00
  766.     00         fdivr     DWORD PTR __real@3f800000
  767.   00066    d9 c0         fld     ST(0)
  768.   00068    de cb         fmulp     ST(3), ST(0)
  769.   0006a    de c9         fmulp     ST(1), ST(0)
  770.   0006c    d9 ee         fldz
  771.   0006e    eb 08         jmp     SHORT $L56311
  772. $L56309:
  773.  
  774. ; 101  : 
  775. ; 102  :     x = (px - m_vCenter.x) / (dwScreenDiameter * m_fRadius * 0.5f); // scales to screen...
  776. ; 103  : #if 1
  777. ; 104  :     y = (m_vCenter.y - py) / (dwScreenDiameter * m_fRadius * 0.5f); // invert Y coordinate...
  778. ; 105  : #else
  779. ; 106  :     y = (py - m_vCenter.y) / (dwScreenDiameter * m_fRadius * 0.5f); // invert Y coordinate...
  780. ; 107  : #endif
  781. ; 108  : 
  782. ; 109  :     x = -x;
  783. ; 110  :     y = -y;
  784. ; 111  : 
  785. ; 112  :     float mag = x*x + y*y;
  786. ; 113  : 
  787. ; 114  :     if (mag > 1.0) {
  788. ; 115  :         float scale = 1.0f/sqrtf(mag);
  789. ; 116  :         x *= scale;
  790. ; 117  :         y *= scale;
  791. ; 118  :         z = 0.0;
  792. ; 119  :     } else {
  793. ; 120  :         z = sqrtf((1.0f-mag));
  794.  
  795.   00070    d9 e8         fld1
  796.   00072    d8 e1         fsub     ST(0), ST(1)
  797.   00074    d9 fa         fsqrt
  798.   00076    dd d9         fstp     ST(1)
  799. $L56311:
  800.  
  801. ; 121  :     }
  802. ; 122  : 
  803. ; 123  :     return D3DXVECTOR3(x,y,z);
  804.  
  805.   00078    8b 45 08     mov     eax, DWORD PTR ___$ReturnUdt$[ebp]
  806.   0007b    d9 c2         fld     ST(2)
  807.   0007d    d9 18         fstp     DWORD PTR [eax]
  808.   0007f    d9 c1         fld     ST(1)
  809.   00081    d9 58 04     fstp     DWORD PTR [eax+4]
  810.   00084    d9 58 08     fstp     DWORD PTR [eax+8]
  811.   00087    dd d8         fstp     ST(0)
  812.   00089    dd d8         fstp     ST(0)
  813.  
  814. ; 124  : }
  815.  
  816.   0008b    c9         leave
  817.   0008c    c2 0c 00     ret     12            ; 0000000cH
  818. ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z ENDP ; GXArcBall::ScreenToVector
  819. _TEXT    ENDS
  820. PUBLIC    ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z ; QuatFromBallPoints
  821. ; Function compile flags: /Ogs
  822. ;    COMDAT ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z
  823. _TEXT    SEGMENT
  824. _vPart$ = -24                        ; size = 12
  825. _v$56436 = -12                        ; size = 12
  826. ___$ReturnUdt$ = 8                    ; size = 4
  827. _vFrom$ = 12                        ; size = 4
  828. _vTo$ = 16                        ; size = 4
  829. ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z PROC NEAR ; QuatFromBallPoints, COMDAT
  830.  
  831. ; 145  : }
  832.  
  833.   00000    8b ff         npad     2
  834.  
  835. ; 138  : {
  836.  
  837.   00002    55         push     ebp
  838.   00003    8b ec         mov     ebp, esp
  839.   00005    83 ec 18     sub     esp, 24            ; 00000018H
  840.  
  841. ; 139  :     D3DXVECTOR3 vPart;
  842. ; 140  :     float     dotPart = D3DXVec3Dot(&vFrom, &vTo);
  843.  
  844.   00008    8b 45 0c     mov     eax, DWORD PTR _vFrom$[ebp]
  845.   0000b    8b 4d 10     mov     ecx, DWORD PTR _vTo$[ebp]
  846.   0000e    d9 40 04     fld     DWORD PTR [eax+4]
  847.   00011    d8 49 04     fmul     DWORD PTR [ecx+4]
  848.   00014    56         push     esi
  849.   00015    d9 00         fld     DWORD PTR [eax]
  850.   00017    57         push     edi
  851.   00018    d8 09         fmul     DWORD PTR [ecx]
  852.  
  853. ; 141  : 
  854. ; 142  :     D3DXVec3Cross(&vPart, &vFrom, &vTo);
  855.  
  856.   0001a    8d 75 f4     lea     esi, DWORD PTR _v$56436[ebp]
  857.   0001d    8d 7d e8     lea     edi, DWORD PTR _vPart$[ebp]
  858.   00020    de c1         faddp     ST(1), ST(0)
  859.   00022    d9 41 08     fld     DWORD PTR [ecx+8]
  860.   00025    d8 48 08     fmul     DWORD PTR [eax+8]
  861.   00028    de c1         faddp     ST(1), ST(0)
  862.   0002a    d9 40 04     fld     DWORD PTR [eax+4]
  863.   0002d    d8 49 08     fmul     DWORD PTR [ecx+8]
  864.   00030    d9 40 08     fld     DWORD PTR [eax+8]
  865.   00033    d8 49 04     fmul     DWORD PTR [ecx+4]
  866.   00036    de e9         fsubp     ST(1), ST(0)
  867.   00038    d9 5d f4     fstp     DWORD PTR _v$56436[ebp]
  868.   0003b    d9 01         fld     DWORD PTR [ecx]
  869.   0003d    d8 48 08     fmul     DWORD PTR [eax+8]
  870.   00040    d9 41 08     fld     DWORD PTR [ecx+8]
  871.   00043    d8 08         fmul     DWORD PTR [eax]
  872.   00045    de e9         fsubp     ST(1), ST(0)
  873.   00047    d9 5d f8     fstp     DWORD PTR _v$56436[ebp+4]
  874.   0004a    d9 00         fld     DWORD PTR [eax]
  875.   0004c    d8 49 04     fmul     DWORD PTR [ecx+4]
  876.   0004f    d9 40 04     fld     DWORD PTR [eax+4]
  877.  
  878. ; 143  : 
  879. ; 144  :     return D3DXQUATERNION(vPart.x, vPart.y, vPart.z, dotPart);
  880.  
  881.   00052    8b 45 08     mov     eax, DWORD PTR ___$ReturnUdt$[ebp]
  882.   00055    d8 09         fmul     DWORD PTR [ecx]
  883.   00057    de e9         fsubp     ST(1), ST(0)
  884.   00059    d9 5d fc     fstp     DWORD PTR _v$56436[ebp+8]
  885.   0005c    a5         movsd
  886.   0005d    a5         movsd
  887.   0005e    a5         movsd
  888.   0005f    d9 45 e8     fld     DWORD PTR _vPart$[ebp]
  889.   00062    d9 18         fstp     DWORD PTR [eax]
  890.   00064    8b 4d ec     mov     ecx, DWORD PTR _vPart$[ebp+4]
  891.   00067    89 48 04     mov     DWORD PTR [eax+4], ecx
  892.   0006a    d9 58 0c     fstp     DWORD PTR [eax+12]
  893.   0006d    8b 4d f0     mov     ecx, DWORD PTR _vPart$[ebp+8]
  894.   00070    5f         pop     edi
  895.   00071    89 48 08     mov     DWORD PTR [eax+8], ecx
  896.   00074    5e         pop     esi
  897.  
  898. ; 145  : }
  899.  
  900.   00075    c9         leave
  901.   00076    c3         ret     0
  902. ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z ENDP ; QuatFromBallPoints
  903. _TEXT    ENDS
  904. PUBLIC    ??0GXArcBall@@QAE@XZ                ; GXArcBall::GXArcBall
  905. ; Function compile flags: /Ogs
  906. ;    COMDAT ??0GXArcBall@@QAE@XZ
  907. _TEXT    SEGMENT
  908. ??0GXArcBall@@QAE@XZ PROC NEAR                ; GXArcBall::GXArcBall, COMDAT
  909. ; _this$ = ecx
  910.  
  911. ; 37   :     Reset();
  912.  
  913.   00000    e8 00 00 00 00     call     ?Reset@GXArcBall@@QAEXXZ ; GXArcBall::Reset
  914.  
  915. ; 38   : }
  916.  
  917.   00005    8b c1         mov     eax, ecx
  918.   00007    c3         ret     0
  919. ??0GXArcBall@@QAE@XZ ENDP                ; GXArcBall::GXArcBall
  920. _TEXT    ENDS
  921. PUBLIC    ??0GXArcBall@@QAE@ABH0@Z            ; GXArcBall::GXArcBall
  922. ; Function compile flags: /Ogs
  923. ;    COMDAT ??0GXArcBall@@QAE@ABH0@Z
  924. _TEXT    SEGMENT
  925. $T56461 = -12                        ; size = 12
  926. _x$ = 8                            ; size = 4
  927. _y$ = 12                        ; size = 4
  928. ??0GXArcBall@@QAE@ABH0@Z PROC NEAR            ; GXArcBall::GXArcBall, COMDAT
  929. ; _this$ = ecx
  930.  
  931. ; 44   : }
  932.  
  933.   00000    8b ff         npad     2
  934.  
  935. ; 41   : {
  936.  
  937.   00002    55         push     ebp
  938.   00003    8b ec         mov     ebp, esp
  939.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  940.  
  941. ; 42   :     m_vCenter = D3DXVECTOR3((float)x,(float)y,0.0f);
  942.  
  943.   00008    8b 45 08     mov     eax, DWORD PTR _x$[ebp]
  944.   0000b    db 00         fild     DWORD PTR [eax]
  945.   0000d    8b 45 0c     mov     eax, DWORD PTR _y$[ebp]
  946.   00010    56         push     esi
  947.   00011    57         push     edi
  948.   00012    d9 5d f4     fstp     DWORD PTR $T56461[ebp]
  949.   00015    8d 75 f4     lea     esi, DWORD PTR $T56461[ebp]
  950.   00018    db 00         fild     DWORD PTR [eax]
  951.   0001a    8b f9         mov     edi, ecx
  952.   0001c    d9 5d f8     fstp     DWORD PTR $T56461[ebp+4]
  953.   0001f    d9 ee         fldz
  954.   00021    d9 5d fc     fstp     DWORD PTR $T56461[ebp+8]
  955.   00024    a5         movsd
  956.   00025    a5         movsd
  957.   00026    a5         movsd
  958.  
  959. ; 43   :     Reset();
  960.  
  961.   00027    e8 00 00 00 00     call     ?Reset@GXArcBall@@QAEXXZ ; GXArcBall::Reset
  962.   0002c    5f         pop     edi
  963.  
  964. ; 44   : }
  965.  
  966.   0002d    8b c1         mov     eax, ecx
  967.   0002f    5e         pop     esi
  968.   00030    c9         leave
  969.   00031    c2 08 00     ret     8
  970. ??0GXArcBall@@QAE@ABH0@Z ENDP                ; GXArcBall::GXArcBall
  971. _TEXT    ENDS
  972. PUBLIC    ??0GXArcBall@@QAE@AAUD3DXVECTOR3@@@Z        ; GXArcBall::GXArcBall
  973. ; Function compile flags: /Ogs
  974. ;    COMDAT ??0GXArcBall@@QAE@AAUD3DXVECTOR3@@@Z
  975. _TEXT    SEGMENT
  976. _center$ = 8                        ; size = 4
  977. ??0GXArcBall@@QAE@AAUD3DXVECTOR3@@@Z PROC NEAR        ; GXArcBall::GXArcBall, COMDAT
  978. ; _this$ = ecx
  979.  
  980. ; 50   : }
  981.  
  982.   00000    8b ff         npad     2
  983.  
  984. ; 47   : {
  985.  
  986.   00002    55         push     ebp
  987.   00003    8b ec         mov     ebp, esp
  988.   00005    56         push     esi
  989.  
  990. ; 48   :     m_vCenter = center;
  991.  
  992.   00006    8b 75 08     mov     esi, DWORD PTR _center$[ebp]
  993.   00009    57         push     edi
  994.   0000a    8b f9         mov     edi, ecx
  995.   0000c    a5         movsd
  996.   0000d    a5         movsd
  997.   0000e    a5         movsd
  998.  
  999. ; 49   :     Reset();
  1000.  
  1001.   0000f    e8 00 00 00 00     call     ?Reset@GXArcBall@@QAEXXZ ; GXArcBall::Reset
  1002.   00014    5f         pop     edi
  1003.  
  1004. ; 50   : }
  1005.  
  1006.   00015    8b c1         mov     eax, ecx
  1007.   00017    5e         pop     esi
  1008.   00018    5d         pop     ebp
  1009.   00019    c2 04 00     ret     4
  1010. ??0GXArcBall@@QAE@AAUD3DXVECTOR3@@@Z ENDP        ; GXArcBall::GXArcBall
  1011. _TEXT    ENDS
  1012. PUBLIC    ?BeginDrag@GXArcBall@@QAEXABH0@Z        ; GXArcBall::BeginDrag
  1013. ; Function compile flags: /Ogs
  1014. ;    COMDAT ?BeginDrag@GXArcBall@@QAEXABH0@Z
  1015. _TEXT    SEGMENT
  1016. $T56499 = -12                        ; size = 12
  1017. _x$ = 8                            ; size = 4
  1018. _y$ = 12                        ; size = 4
  1019. ?BeginDrag@GXArcBall@@QAEXABH0@Z PROC NEAR        ; GXArcBall::BeginDrag, COMDAT
  1020. ; _this$ = ecx
  1021.  
  1022. ; 74   : }
  1023.  
  1024.   00000    8b ff         npad     2
  1025.  
  1026. ; 71   : {
  1027.  
  1028.   00002    55         push     ebp
  1029.   00003    8b ec         mov     ebp, esp
  1030.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  1031.   00008    56         push     esi
  1032.   00009    57         push     edi
  1033.  
  1034. ; 72   :     m_bDrag = true;
  1035. ; 73   :     m_vDown = ScreenToVector(x,y);
  1036.  
  1037.   0000a    ff 75 0c     push     DWORD PTR _y$[ebp]
  1038.   0000d    8d 45 f4     lea     eax, DWORD PTR $T56499[ebp]
  1039.   00010    ff 75 08     push     DWORD PTR _x$[ebp]
  1040.   00013    c6 41 50 01     mov     BYTE PTR [ecx+80], 1
  1041.   00017    50         push     eax
  1042.   00018    e8 00 00 00 00     call     ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z ; GXArcBall::ScreenToVector
  1043.   0001d    8d 79 0c     lea     edi, DWORD PTR [ecx+12]
  1044.   00020    8b f0         mov     esi, eax
  1045.   00022    a5         movsd
  1046.   00023    a5         movsd
  1047.   00024    a5         movsd
  1048.   00025    5f         pop     edi
  1049.   00026    5e         pop     esi
  1050.  
  1051. ; 74   : }
  1052.  
  1053.   00027    c9         leave
  1054.   00028    c2 08 00     ret     8
  1055. ?BeginDrag@GXArcBall@@QAEXABH0@Z ENDP            ; GXArcBall::BeginDrag
  1056. _TEXT    ENDS
  1057. PUBLIC    ?Update@GXArcBall@@QAEXXZ            ; GXArcBall::Update
  1058. ; Function compile flags: /Ogs
  1059. ;    COMDAT ?Update@GXArcBall@@QAEXXZ
  1060. _TEXT    SEGMENT
  1061. $T56501 = -32                        ; size = 16
  1062. _qT$56511 = -16                        ; size = 16
  1063. ?Update@GXArcBall@@QAEXXZ PROC NEAR            ; GXArcBall::Update, COMDAT
  1064. ; _this$ = ecx
  1065.  
  1066. ; 133  : #endif
  1067. ; 134  :     }
  1068. ; 135  : }
  1069.  
  1070.   00000    8b ff         npad     2
  1071.  
  1072. ; 127  : {
  1073.  
  1074.   00002    55         push     ebp
  1075.   00003    8b ec         mov     ebp, esp
  1076.   00005    83 ec 20     sub     esp, 32            ; 00000020H
  1077.   00008    56         push     esi
  1078.   00009    8b f1         mov     esi, ecx
  1079.  
  1080. ; 128  :     if (m_bDrag) { // recompute m_qNow
  1081.  
  1082.   0000b    80 7e 50 00     cmp     BYTE PTR [esi+80], 0
  1083.   0000f    74 2e         je     SHORT $L56316
  1084.   00011    57         push     edi
  1085.  
  1086. ; 129  : #if 0
  1087. ; 130  :         m_qNow = QuatFromBallPoints(m_vDown, m_vCur) * m_qDown;
  1088. ; 131  : #else
  1089. ; 132  :         m_qNow = m_qDown * QuatFromBallPoints(m_vDown, m_vCur);
  1090.  
  1091.   00012    8d 46 18     lea     eax, DWORD PTR [esi+24]
  1092.   00015    50         push     eax
  1093.   00016    8d 46 0c     lea     eax, DWORD PTR [esi+12]
  1094.   00019    50         push     eax
  1095.   0001a    8d 45 e0     lea     eax, DWORD PTR $T56501[ebp]
  1096.   0001d    50         push     eax
  1097.   0001e    e8 00 00 00 00     call     ?QuatFromBallPoints@@YA?AUD3DXQUATERNION@@ABUD3DXVECTOR3@@0@Z ; QuatFromBallPoints
  1098.   00023    83 c4 0c     add     esp, 12            ; 0000000cH
  1099.   00026    50         push     eax
  1100.   00027    8d 46 24     lea     eax, DWORD PTR [esi+36]
  1101.   0002a    50         push     eax
  1102.   0002b    8d 45 f0     lea     eax, DWORD PTR _qT$56511[ebp]
  1103.   0002e    50         push     eax
  1104.   0002f    e8 00 00 00 00     call     _D3DXQuaternionMultiply@12
  1105.   00034    8d 7e 34     lea     edi, DWORD PTR [esi+52]
  1106.   00037    8d 75 f0     lea     esi, DWORD PTR _qT$56511[ebp]
  1107.   0003a    a5         movsd
  1108.   0003b    a5         movsd
  1109.   0003c    a5         movsd
  1110.   0003d    a5         movsd
  1111.   0003e    5f         pop     edi
  1112. $L56316:
  1113.   0003f    5e         pop     esi
  1114.  
  1115. ; 133  : #endif
  1116. ; 134  :     }
  1117. ; 135  : }
  1118.  
  1119.   00040    c9         leave
  1120.   00041    c3         ret     0
  1121. ?Update@GXArcBall@@QAEXXZ ENDP                ; GXArcBall::Update
  1122. _TEXT    ENDS
  1123. PUBLIC    ?Mouse@GXArcBall@@QAEXABH0@Z            ; GXArcBall::Mouse
  1124. ; Function compile flags: /Ogs
  1125. ;    COMDAT ?Mouse@GXArcBall@@QAEXABH0@Z
  1126. _TEXT    SEGMENT
  1127. $T56514 = -12                        ; size = 12
  1128. _x$ = 8                            ; size = 4
  1129. _y$ = 12                        ; size = 4
  1130. ?Mouse@GXArcBall@@QAEXABH0@Z PROC NEAR            ; GXArcBall::Mouse, COMDAT
  1131. ; _this$ = ecx
  1132.  
  1133. ; 87   :     }
  1134. ; 88   : }
  1135.  
  1136.   00000    8b ff         npad     2
  1137.  
  1138. ; 83   : {
  1139.  
  1140.   00002    55         push     ebp
  1141.   00003    8b ec         mov     ebp, esp
  1142.   00005    83 ec 0c     sub     esp, 12            ; 0000000cH
  1143.  
  1144. ; 84   :     if (m_bDrag) { // ignore it if you aren't dragging
  1145.  
  1146.   00008    80 79 50 00     cmp     BYTE PTR [ecx+80], 0
  1147.   0000c    74 20         je     SHORT $L56291
  1148.   0000e    56         push     esi
  1149.   0000f    57         push     edi
  1150.  
  1151. ; 85   :         m_vCur = ScreenToVector(x,y);
  1152.  
  1153.   00010    ff 75 0c     push     DWORD PTR _y$[ebp]
  1154.   00013    8d 45 f4     lea     eax, DWORD PTR $T56514[ebp]
  1155.   00016    ff 75 08     push     DWORD PTR _x$[ebp]
  1156.   00019    50         push     eax
  1157.   0001a    e8 00 00 00 00     call     ?ScreenToVector@GXArcBall@@IAE?AUD3DXVECTOR3@@ABH0@Z ; GXArcBall::ScreenToVector
  1158.   0001f    8d 79 18     lea     edi, DWORD PTR [ecx+24]
  1159.   00022    8b f0         mov     esi, eax
  1160.   00024    a5         movsd
  1161.   00025    a5         movsd
  1162.   00026    a5         movsd
  1163.  
  1164. ; 86   :         Update(); // always build qNow_...
  1165.  
  1166.   00027    e8 00 00 00 00     call     ?Update@GXArcBall@@QAEXXZ ; GXArcBall::Update
  1167.   0002c    5f         pop     edi
  1168.   0002d    5e         pop     esi
  1169. $L56291:
  1170.  
  1171. ; 87   :     }
  1172. ; 88   : }
  1173.  
  1174.   0002e    c9         leave
  1175.   0002f    c2 08 00     ret     8
  1176. ?Mouse@GXArcBall@@QAEXABH0@Z ENDP            ; GXArcBall::Mouse
  1177. _TEXT    ENDS
  1178. END
  1179.